Subqueries এবং Nested Queries

Microsoft Technologies - এমএস এসকিউএল সার্ভার (MS SQl Server) - SQL Server এর Advanced Query Techniques
248

SQL তে Subqueries এবং Nested Queries হল এমন queries যা অন্য একটি query এর ভিতরে ব্যবহৃত হয়। এই দুটি টার্ম প্রায়ই একে অপরের সাথে পরিবর্তনীয়ভাবে ব্যবহৃত হলেও, তাদের মধ্যে কিছু পার্থক্য রয়েছে। সাধারণভাবে, একটি subquery হলো একটি query যা অন্য একটি query এর মধ্যে থাকে এবং nested query হলো subquery এর একটি বিশেষ ধরনের অবস্থা যেখানে একাধিক subquery একে অপরের মধ্যে থাকে।


1. Subquery (সাবকোয়েরি)

Subquery হলো এমন একটি SQL query যা অন্য একটি query এর মধ্যে ব্যবহৃত হয়, সাধারণত SELECT, INSERT, UPDATE, বা DELETE কমান্ডের মধ্যে। সাবকোয়েরি সাধারণত মূল query এর জন্য শর্ত বা মান প্রদান করে। সাবকোয়েরি একটি query এর ফলাফল হিসেবে কাজ করে এবং মূল query তে একটি শর্ত হিসাবে ব্যবহৃত হয়।

Subquery এর ধরন:

  • Single-row subquery: একক রেকর্ড রিটার্ন করে।
  • Multiple-row subquery: একাধিক রেকর্ড রিটার্ন করে।
  • Correlated subquery: মূল query এর সাথে সম্পর্কিত হয়।

Syntax:

SELECT column1, column2, ...
FROM table_name
WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);

উদাহরণ:

ধরা যাক, আমরা Employees টেবিল থেকে এমন সব কর্মচারীর নাম চাই, যারা 30 বছরের বেশি বয়সী এবং তাদের উপর নির্ধারিত বোনাস (Bonus) এর পরিমাণ 1000 এর বেশি।

SELECT FirstName, LastName
FROM Employees
WHERE EmployeeID IN (SELECT EmployeeID FROM Bonuses WHERE Amount > 1000);

এখানে, ভিতরের subquery (SELECT EmployeeID FROM Bonuses WHERE Amount > 1000) প্রথমে সব EmployeeID বের করবে যাদের বোনাস 1000 এর বেশি। তারপর বাইরের SELECT query সেই EmployeeID এর সাথে মিলে যাওয়া Employees টেবিল থেকে কর্মচারীদের নাম রিটার্ন করবে।


2. Correlated Subquery (কোরেলেটেড সাবকোয়েরি)

Correlated subquery হল এমন একটি subquery যা বাইরের query এর কলাম থেকে মান নেয়। অর্থাৎ, এই subquery এর ফলাফল বাইরের query এর প্রতিটি রেকর্ডের উপর নির্ভর করে।

উদাহরণ:

ধরা যাক, আমাদের কাছে একটি Employees টেবিল এবং একটি Salaries টেবিল রয়েছে। আমরা এমন কর্মচারীদের নাম চাই, যারা নিজের পুরানো বেতন থেকে বেশি বেতন পাচ্ছে। এখানে একটি correlated subquery ব্যবহার করা হবে:

SELECT e.FirstName, e.LastName
FROM Employees e
WHERE e.Salary > (SELECT s.Salary FROM Salaries s WHERE s.EmployeeID = e.EmployeeID);

এখানে, subquery এর মধ্যে e.EmployeeID ব্যবহার করা হয়েছে, যা বাইরের query এর কলাম থেকে নেয়। ফলে এটি correlated subquery। সাবকোয়েরিটি বাইরের query এর প্রতিটি রেকর্ডের সাথে সম্পর্কিত থাকে।


3. Nested Queries (নেস্টেড কোয়েরি)

Nested Query বলতে বোঝানো হয় একটি query এর মধ্যে আরও একটি বা একাধিক query ব্যবহৃত। Nested query সাধারণত subquery হিসেবে ব্যবহৃত হয়, তবে একাধিক subquery গুলি একে অপরের মধ্যে নেস্টেড থাকতে পারে। Nested query এর মাধ্যমে বিভিন্ন ধরণের জটিল ডেটা রিটার্ন করা যায়।

উদাহরণ:

ধরা যাক, Orders এবং Customers টেবিল রয়েছে এবং আপনি এমন গ্রাহকদের নাম জানতে চান, যারা এমন সব অর্ডার করেছেন, যেখানে মোট অর্ডার মূল্য 5000 এর বেশি।

SELECT CustomerName
FROM Customers
WHERE CustomerID IN 
    (SELECT CustomerID 
     FROM Orders 
     WHERE TotalAmount > 5000);

এখানে, nested query (যেটি Orders টেবিলের উপর চলে) প্রথমে সমস্ত CustomerID বের করবে, যাদের মোট অর্ডার মূল্য 5000 এর বেশি। তারপর বাইরের query সেই CustomerID গুলি অনুযায়ী গ্রাহকের নাম বের করবে।


4. Types of Subqueries

4.1 Single-Row Subquery (একক-রেকর্ড সাবকোয়েরি)

এটি এমন একটি subquery যা শুধুমাত্র একটি একক রেকর্ড রিটার্ন করে। এটি সাধারণত = (ইকুয়াল), <, >, <=, >=, এবং <> অপারেটরদের সাথে ব্যবহৃত হয়।

উদাহরণ:

SELECT FirstName, LastName
FROM Employees
WHERE EmployeeID = (SELECT EmployeeID FROM Employees WHERE FirstName = 'John' AND LastName = 'Doe');

এখানে, subquery একটি মাত্র EmployeeID রিটার্ন করবে যেটি EmployeeID এর সাথে বাইরের query তে মিলিয়ে FirstName এবং LastName প্রদর্শন করবে।

4.2 Multiple-Row Subquery (একাধিক-রেকর্ড সাবকোয়েরি)

এটি এমন একটি subquery যা একাধিক রেকর্ড রিটার্ন করে। এটি সাধারণত IN, ANY, বা ALL অপারেটরের সাথে ব্যবহৃত হয়।

উদাহরণ:

SELECT FirstName, LastName
FROM Employees
WHERE EmployeeID IN (SELECT EmployeeID FROM Orders WHERE OrderDate > '2024-01-01');

এখানে, subquery সমস্ত EmployeeID রিটার্ন করবে যাদের Orders টেবিলের মধ্যে অর্ডার তারিখ 2024-01-01 এর পর।


5. Performance Considerations for Subqueries

যদিও subqueries শক্তিশালী এবং নমনীয়, তবে তাদের ব্যবহার পারফরম্যান্স সমস্যাও তৈরি করতে পারে, বিশেষত যখন বড় ডেটাবেস বা জটিল subqueries ব্যবহার করা হয়। কিছু পরামর্শ:

  • Indexed columns ব্যবহার করুন: যেসব কলামগুলো WHERE, IN, বা JOIN শর্তে ব্যবহৃত হয়, তাদের উপর ইনডেক্স রাখা পারফরম্যান্স উন্নত করতে পারে।
  • Joins এর মাধ্যমে Subqueries প্রতিস্থাপন করুন: কিছু সময় subquery এর পরিবর্তে JOIN ব্যবহার করা পারফরম্যান্সের জন্য ভালো হতে পারে।

সারাংশ

Subqueries এবং Nested Queries SQL তে ডেটা ম্যানিপুলেশন এবং চয়ন করার জন্য শক্তিশালী টুলস। Subqueries বাইরের query এর জন্য একটি অন্তর্নিহিত শর্ত বা মান প্রদান করে, আর Nested Queries একাধিক subquery একে অপরের মধ্যে থাকে। এই টেকনিকগুলোর সঠিক ব্যবহার ডেটাবেস থেকে জটিল তথ্য খুব দ্রুত এবং কার্যকরভাবে বের করতে সাহায্য করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...